package com.zkn.orm.spring.data.jpa.repository;

import java.util.List;

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;

import com.zkn.orm.spring.data.jpa.model.Department;

/**
 * 标准的CRUD功能repositories通常有对底层数据存储查询。Spring Data声明这些查询分四个步骤:
 * 1. 声明一个接口扩展Repository 或者它的一个子接口，然后指定实体类型和ID类型。
 * 2. 在接口里声明查询方法。
 * 3. 部署Spring为这些接口创建代理实例。可以通过JavaConfig类或者XML配置方式。
 * 		<jpa:repositories base-package="com.acme.repositories"/>
 * 4. 注入repository实例并使用它。
 * 
 * @author Frank.Su
 *
 */
public interface DepartmentCrudRepository extends CrudRepository<Department, Integer> {

	@Query("from Department d where d.departmentCode = ?")
	Department findByCode(String departmentCode);
	
	/**
	 * 方法名是findByXXX
	 * 如果XXX是Domain类的Property，则Spring Data JPA Repository会自动解析出SQL；
	 * 如果XXX不是Domain类的Property，则会报No property department found for type Department!
	 * 
	 * @param departmentCode
	 * @return
	 */
	Department findByDepartmentCode(String departmentCode);
	
	List<Department> findByDepartmentName(String departmentName);
}
